/**
 * 
 */
package edu.erpan.web.materiaPrima;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;

import javax.faces.event.ActionEvent;

import edu.erpan.bl.entities.Proveedor;
import edu.erpan.fachada.IMateriaPrimaFachada;
import edu.erpan.fachada.MateriaPrimaFachada;
import edu.erpan.util.entityManager.exceptions.IdNotFoundException;
import edu.erpan.util.entityManager.exceptions.PersistException;
import edu.erpan.util.entityManager.exceptions.QueryException;
import edu.erpan.web.util.Recursos;

/**
 * @author Jeison
 * @date 4/11/2012
 *
 */
public class ProveedorBean implements Serializable {

	/**
	 * @author Jeison
	 * @date 12/06/2013
	 */
	private static final long serialVersionUID = 1898644322059820976L;

	private Proveedor proveedor;
	
	private TimeZone timeZone;
	
	private boolean editandoProveedor;
	
	private List<Proveedor>proveedores;
	/**
	 * 
	 *
	 * @author Jeison
	 * @date 4/11/2012
	 */
	public ProveedorBean() {
		this.timeZone=TimeZone.getTimeZone("America/Lima");
		
		this.proveedor=new Proveedor();
		this.proveedor.setFechaIngreso(new Date());
		
		this.consultarProveedores();
	}
	
	private boolean validarCamposProveedor(Proveedor proveedor){
		boolean cumple=true;
		
		String mensaje = Recursos.getInstance().getMensaje("campo.obligatorio");
		String nombreCampo="";
		
		if(proveedor.getFechaIngreso()==null){
			cumple=false;
			nombreCampo=Recursos.getInstance().getEtiqueta("proveedor.fechaIngreso");
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje("idMensajes"),Recursos.ERROR, mensaje.replace("{0}", nombreCampo));
		}
		if(proveedor.getNombre()==null||proveedor.getNombre().trim().isEmpty()){
			cumple=false;
			nombreCampo=Recursos.getInstance().getEtiqueta("proveedor.nombre");
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje("idMensajes"),Recursos.ERROR, mensaje.replace("{0}", nombreCampo));
		}
		if(proveedor.getRepresentante()==null||proveedor.getRepresentante().trim().isEmpty()){
			cumple=false;
			nombreCampo=Recursos.getInstance().getEtiqueta("proveedor.representante");
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje("idMensajes"),Recursos.ERROR, mensaje.replace("{0}", nombreCampo));
		}
		if(proveedor.getContacto()==null||proveedor.getContacto().trim().isEmpty()){
			cumple=false;
			nombreCampo=Recursos.getInstance().getEtiqueta("proveedor.contacto");
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje("idMensajes"),Recursos.ERROR, mensaje.replace("{0}", nombreCampo));
		}
		if(proveedor.getTelefono()==null||proveedor.getTelefono().trim().isEmpty()){
			cumple=false;
			nombreCampo=Recursos.getInstance().getEtiqueta("proveedor.telefono");
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje("idMensajes"),Recursos.ERROR, mensaje.replace("{0}", nombreCampo));
		}
		if(proveedor.getCorreoElectronico()==null||proveedor.getCorreoElectronico().trim().isEmpty()){
			cumple=false;
			nombreCampo=Recursos.getInstance().getEtiqueta("proveedor.correoElectronico");
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje("idMensajes"),Recursos.ERROR, mensaje.replace("{0}", nombreCampo));
		}
		if(proveedor.getDireccion()==null||proveedor.getDireccion().trim().isEmpty()){
			cumple=false;
			nombreCampo=Recursos.getInstance().getEtiqueta("proveedor.direccion");
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje("idMensajes"),Recursos.ERROR, mensaje.replace("{0}", nombreCampo));
		}
		if(proveedor.getDiaEntrega()==null||proveedor.getDiaEntrega().trim().isEmpty()){
			cumple=false;
			nombreCampo=Recursos.getInstance().getEtiqueta("proveedor.diaEntrega");
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje("idMensajes"),Recursos.ERROR, mensaje.replace("{0}", nombreCampo));
		}
		if(proveedor.getFormaPago()==null||proveedor.getFormaPago().trim().isEmpty()){
			cumple=false;
			nombreCampo=Recursos.getInstance().getEtiqueta("proveedor.formaPago");
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje("idMensajes"),Recursos.ERROR, mensaje.replace("{0}", nombreCampo));
		}
		if(proveedor.getTiempoEntrega()<=0){
			cumple=false;
			nombreCampo=Recursos.getInstance().getEtiqueta("proveedor.tiempoEntrega");
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje("idMensajes"),Recursos.ERROR, mensaje.replace("{0}", nombreCampo));
		}
		
		return cumple;
	}
	
	public void guardarProveedor(ActionEvent evento){
		try{
			if(validarCamposProveedor(this.proveedor)){
				IMateriaPrimaFachada materiaPrimaFachada=new MateriaPrimaFachada();
				materiaPrimaFachada.guardarProveedor(this.proveedor);
				
				this.consultarProveedores();
			}
		} catch (PersistException e) {
			// TODO Auto-generated catch block
			String nombreEntidad=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_PROVEEDOR);
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_GUARDADO);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje.replace("{0}", nombreEntidad));
		} catch (Exception e) {
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_INESPERADO);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje);
		}
	}
	
	public void seleccionarProveedorEditar(ActionEvent evento){
		Integer idProveedor=(Integer) evento.getComponent().getAttributes().get("idProveedor");
		IMateriaPrimaFachada materiaPrimaFachada=new MateriaPrimaFachada();
		
		try {
			
			Proveedor proveedor=new Proveedor();
			proveedor.setIdproveedores(idProveedor);
			
			this.proveedor=materiaPrimaFachada.consultarProveedor(proveedor);
			editandoProveedor=true;
		} catch (QueryException e) {
			// TODO Auto-generated catch block
			String nombreEntidad=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_PROVEEDOR);
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_SELECCION);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje.replace("{0}", nombreEntidad));
		} catch (IdNotFoundException e) {
			// TODO Auto-generated catch block
			String nombreEntidad=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_PROVEEDOR);
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_SELECCION);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje.replace("{0}", nombreEntidad));
		}
	}
	
	public void editarProveedor(ActionEvent evento){
		try{
			if(validarCamposProveedor(this.proveedor)){
				IMateriaPrimaFachada materiaPrimaFachada=new MateriaPrimaFachada();
				materiaPrimaFachada.editarProveedor(this.proveedor);
				
				this.consultarProveedores();
			}
		} catch (PersistException e) {
			// TODO Auto-generated catch block
			String nombreEntidad=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_PROVEEDOR);
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_GUARDADO);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje.replace("{0}", nombreEntidad));
		} catch (Exception e) {
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_INESPERADO);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje);
		}
	}

	public void cancelarEdicionProveedor(ActionEvent evento){
		this.proveedor=new Proveedor();
		this.proveedor.setFechaIngreso(new Date());
		
		editandoProveedor=false;
	}
	
	public void consultarProveedores(ActionEvent evento){
		this.consultarProveedores();
	}
	
	private void consultarProveedores(){
		try {
			IMateriaPrimaFachada materiaPrimaFachada=new MateriaPrimaFachada();
			
			this.proveedores=materiaPrimaFachada.consultarProveedores(null);
			
		} catch (QueryException e) {
			String nombreEntidad=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_PROVEEDORES);
			String mensaje=Recursos.getInstance().getMensaje(Recursos.MENSAJE_ERROR_CONSULTA);
			Recursos.getInstance().addMessagePage(Recursos.getInstance().getMensaje(Recursos.ID_MENSAJES),Recursos.ERROR, mensaje.replace("{0}", nombreEntidad));
		}
	}
	/**
	 * @return the proveedor
	 *
	 * @author Jeison
	 * @date 4/11/2012
	 */
	public Proveedor getProveedor() {
		return proveedor;
	}
	/**
	 * @param proveedor the proveedor to set
	 * 
	 * @author Jeison
	 * @date 4/11/2012
	 */
	public void setProveedor(Proveedor proveedor) {
		this.proveedor = proveedor;
	}
	/**
	 * @return the timeZone
	 *
	 * @author Jeison
	 * @date 4/11/2012
	 */
	public TimeZone getTimeZone() {
		return timeZone;
	}
	/**
	 * @param timeZone the timeZone to set
	 * 
	 * @author Jeison
	 * @date 4/11/2012
	 */
	public void setTimeZone(TimeZone timeZone) {
		this.timeZone = timeZone;
	}
	/**
	 * @return the editandoProveedor
	 *
	 * @author Jeison
	 * @date 4/11/2012
	 */
	public boolean isEditandoProveedor() {
		return editandoProveedor;
	}
	/**
	 * @param editandoProveedor the editandoProveedor to set
	 * 
	 * @author Jeison
	 * @date 4/11/2012
	 */
	public void setEditandoProveedor(boolean editandoProveedor) {
		this.editandoProveedor = editandoProveedor;
	}

	/**
	 * @return the proveedores
	 *
	 * @author Jeison
	 * @date 4/11/2012
	 */
	public List<Proveedor> getProveedores() {
		return proveedores;
	}

	/**
	 * @param proveedores the proveedores to set
	 * 
	 * @author Jeison
	 * @date 4/11/2012
	 */
	public void setProveedores(List<Proveedor> proveedores) {
		this.proveedores = proveedores;
	}

}
